package com.tanglongan.designPattern.dp00_simpleFactory.demo02;

/**
 * 简单工厂类
 * 使用工厂模式之后，当业务扩展的时候，原来的调用方不需要依赖扩展的业务，不需要关心扩展业务的创建细节
 */
public class CourseFactory {

    /**
     * 根据客户端的参数，创建对应的对象
     *
     * @param name 调用方的参数
     */
    public static ICourse create(String name) {
        if ("java".equalsIgnoreCase(name)) {
            return new JavaCourse();
        } else if ("python".equalsIgnoreCase(name)) {
            return new PythonCourse();
        } else if ("golang".equalsIgnoreCase(name)) {
            return new GolangCourse();
        } else {
            return null;
        }
    }

    /**
     * 根据客户端参数创建对象
     *
     * @param clazz 调用方的参数
     */
    public static ICourse create(Class<? extends ICourse> clazz) {
        try {
            if (clazz != null) {
                return clazz.newInstance();
            }
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }


}
